home *** CD-ROM | disk | FTP | other *** search
- /*
- * the class DELETE_LINE
- * Copyright (C) 1996, 1997 Kazutaka Hirata <khirata@jove.acs.unt.edu>
- */
-
- #include "../stdafx.h"
-
- #include "../common/bool.h"
-
- #include "dlline.h"
-
- STAGE *DELETE_LINE::init_new(KBAN_INFO& /* info */, KBAN_DRAW& /* draw */)
- {
- return new STAGE_SELECT;
- }
-
- const char *DELETE_LINE::get_name(void)
- {
- return "Delete:Line";
- }
-
- STAGE *DELETE_LINE::STAGE_SELECT::mouse_left_up(KBAN_INFO& info, KBAN_DRAW& /* draw */, const XY& pc, UINT /* nFlags */)
- {
- PRIMITIVE &primitive = info.kban_data().primitive();
- uint layer = info.active_layer().get();
- LINE_LIST &line_list = primitive.layer(layer).line_list();
-
- XY ac;
- GRID &grid = info.grid();
- grid.xy_pc2ac_with_snap_off(pc, ac);
-
- LINE_ELEMENT *target = NULL;
- for(uint i = 0; i < 5; i++) {
- XYT eps = grid.distance_pc2ac(10 * i);
- target = line_list.search(eps, ac);
- if(target != NULL) {
- break;
- }
- }
-
- STAGE *ret;
- if(target != NULL) {
- ret = new STAGE_CONFIRM(layer, target);
- } else {
- ret = this;
- }
- return ret;
- }
-
- STAGE *DELETE_LINE::STAGE_SELECT::mouse_right_up(KBAN_INFO& /* info */, KBAN_DRAW& /* draw */, const XY& /* pc */, UINT /* nFlags */)
- {
- return NULL;
- }
-
- DELETE_LINE::STAGE_CONFIRM::STAGE_CONFIRM(uint layer, LINE_ELEMENT* target)
- : m_done(0),
- m_old_active_layer(layer),
- m_target(target) {}
-
- STAGE *DELETE_LINE::STAGE_CONFIRM::init(KBAN_INFO& /* info */, KBAN_DRAW& draw)
- {
- draw.draw_primitive_line_target(*m_target);
- return this;
- }
-
- STAGE *DELETE_LINE::STAGE_CONFIRM::redraw(KBAN_INFO& /* info */, KBAN_DRAW& draw)
- {
- draw.draw_primitive_line_target(*m_target);
- return this;
- }
-
- STAGE *DELETE_LINE::STAGE_CONFIRM::mouse_left_up(KBAN_INFO& info, KBAN_DRAW& draw, const XY& /* pc */, UINT /* nFlags */)
- {
- PRIMITIVE &primitive = info.kban_data().primitive();
- LINE_LIST &line_list = primitive.layer(m_old_active_layer).line_list();
-
- draw.erase_primitive_line(*m_target);
- line_list.delete_one(m_target);
- info.SetModifiedFlag();
- info.new_state().set(true);
- info.new_state_str() = "Delete Line";
-
- m_done.set(TRUE);
- return new STAGE_SELECT;
- }
-
- STAGE *DELETE_LINE::STAGE_CONFIRM::mouse_right_up(KBAN_INFO& /* info */, KBAN_DRAW& /* draw */, const XY& /* pc */, UINT /* nFlags */)
- {
- return new STAGE_SELECT;
- }
-
- void DELETE_LINE::STAGE_CONFIRM::end(KBAN_INFO& /* info */, KBAN_DRAW& draw)
- {
- if(!m_done.get()) {
- draw.draw_primitive_line(*m_target, m_old_active_layer);
- }
- }
-